
package br.com.aeternu.controleatendimento.util;

import java.awt.Image;
import java.awt.Toolkit;
import java.io.InputStream;
import java.net.URL;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import org.apache.log4j.Logger;

/**
 * Classe utilitária para a manipulação de ícones.
 * 
 * @author Janeiro/2014: Junio de Souza Fernandes <DD>
 */
public class IconUtil
{

   public static final String SISTEMA_16X16 = "imagens/sistema_16x16.png";
   public static final String SISTEMA_32X32 = "imagens/sistema_32x32.png";
   private static Logger logger = Logger.getLogger(IconUtil.class);

   /**
    * Obtém um ícone de uma imagem remota.
    * 
    * @param url Caminho para uma imagem.
    * @param extension Extensão do arquivo.
    * @return Uma instância da imagem como <code>Icon</code>
    */
   public static Icon getIconFromURL(String url, String extension)
   {
      Icon icon;

      try
      {
         URL imgUrl = new URL(url);
         InputStream is = imgUrl.openStream();
         ImageInputStream iis = ImageIO.createImageInputStream(is);
         Iterator<ImageReader> it = ImageIO.getImageReadersBySuffix(extension);

         ImageReader reader = it.next();
         reader.setInput(iis);

         Image image = reader.read(0);
         icon = new ImageIcon(image);
      }
      catch (Exception e)
      {
         logger.error("Erro na obtenção da URL " + url);
         logger.error(e.getMessage(), e);

         icon = null;
      }

      return icon;
   }

   /**
    * Obtém um ícone de uma imagem local, em um diretório ou jar de sistema.
    * 
    * @param local Local da imagem.
    * @return Uma instância da imagem como <code>Icon</code>
    */
   public static Icon getIconFromLocal(String local)
   {
      return new ImageIcon(getImageFromLocal(local));
   }

   /**
    * Obtém uma imagem local, em um diretório ou jar de sistema.
    * 
    * @param local Local da imagem.
    * @return Uma instância da imagem como <code>Image</code>
    */
   public static Image getImageFromLocal(String local)
   {
      return Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(local));
   }
}
